In computing, a file server is a device attached to a network that has the primary purpose of providing a location for shared disk access, i.e., shared storage of computer files (such as documents, sound files, photographs, movies, images, databases, etc.) that can be accessed by other machines or virtual machines connected to the network. The term “server” highlights the role of the device in the client-server scheme, where the clients are the machines using the storage. A file server is typically not intended to run programs on behalf of its clients. Instead, it is designed primarily to enable the storage and retrieval of data while the computation is carried out on the clients themselves.
One common type of file server is a network-attached storage (NAS) device. NAS is specialized for serving files either by its hardware, software, or configuration, and is often manufactured as a computer appliance—a purpose-built specialized computer. NAS systems are networked appliances which contain one or more storage drives, often arranged into logical, redundant storage containers or RAID.
File servers, including NAS devices, can also be utilized to form a storage area network (SAN), which provides access to consolidated, block level data storage. SANs are primarily used to enhance storage devices, such as disk arrays and tape libraries, so that the devices appear to the operating system as locally attached devices. A SAN typically has its own network of storage devices that are generally not individually exposed outside of the SAN. The cost and complexity of SANs have dropped over time, allowing wider adoption across both enterprise and small to medium-sized business environments. At the same time, the number of file storage products and servers, including NAS devices, has greatly increased.
In order to ensure that important data and services remain online even in the event of an unexpected outage or disaster, file servers and SANs can utilize various techniques broadly categorized as high-availability. For example, high-availability clusters (also known as HA clusters or fail over clusters) are groups of computers that support server applications that can be reliably utilized with a minimum of downtime. They operate by using high availability software to harness redundant computers in groups or clusters that provide continued service when system components fail. Without clustering, if a server running a particular application crashes, the application will be unavailable until the crashed server is fixed. HA clustering remedies this situation by detecting hardware/software faults and immediately restarting the application on another system, usually without requiring administrative intervention, a process known as failover. As part of this process, clustering software may configure the node before starting the application on it. For example, appropriate file systems may need to be imported and mounted, network hardware may have to be configured, and some supporting applications may need to be running as well. HA clusters are often used for critical databases, file sharing on a network, business applications, and customer services such as electronic commerce websites. HA cluster implementations attempt to build redundancy into a cluster to eliminate single points of failure, including multiple network connections and data storage which is redundantly connected via storage area networks.